package com.zxw.flow.service.impl.toc;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.zxw.common.web.util.JwtUtils;
import com.zxw.flow.domain.entity.toc.FlowJsonData;
import com.zxw.flow.domain.vo.toc.FlowJsonDataVO;
import com.zxw.flow.mapper.toc.FlowJsonDataMapper;
import com.zxw.flow.service.toc.FlowJsonDataService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author Xuewei.Zhang
 * @since 2022-08-19
 */
@Service
@RequiredArgsConstructor
public class
FlowJsonDataServiceImpl extends ServiceImpl<FlowJsonDataMapper, FlowJsonData> implements FlowJsonDataService {

    private final FlowJsonDataMapper flowJsonDataMapper;

    @Override
    public FlowJsonData get(Long id) {
        String userAccount = JwtUtils.getUserAccount();
        FlowJsonData flowJsonData = flowJsonDataMapper.selectOneByIdAndUserAccount(id, userAccount);
        return flowJsonData;
    }

    @Override
    public FlowJsonData getByFilePathId(Long filePathId) {
        String userAccount = JwtUtils.getUserAccount();
        FlowJsonData flowJsonData = flowJsonDataMapper.selectOneByUserAccountAndFilePathId(userAccount, filePathId);
        return flowJsonData;
    }

    @Override
    public FlowJsonData insert(FlowJsonDataVO flowJsonDataVO) {
        if (StrUtil.isEmpty(flowJsonDataVO.getUserAccount())) {
            String userAccount = JwtUtils.getUserAccount();
            flowJsonDataVO.setUserAccount(userAccount);
        }
        FlowJsonData flowJsonData = new FlowJsonData();
        BeanUtil.copyProperties(flowJsonDataVO, flowJsonData);
        flowJsonDataMapper.insert(flowJsonData);
        return flowJsonData;
    }

    @Override
    public FlowJsonData insertOrUpdate(FlowJsonDataVO flowJsonDataVO) {
        String userAccount = JwtUtils.getUserAccount();
        FlowJsonData flowJsonData = flowJsonDataMapper.selectOneByUserAccountAndFilePathId(userAccount, flowJsonDataVO.getFilePathId());
        if (ObjectUtil.isEmpty(flowJsonData)) {
            this.insert(flowJsonDataVO);
        } else {
            flowJsonDataVO.setId(flowJsonData.getId());
            this.update(flowJsonDataVO);
        }
        return flowJsonDataVO;
    }

    @Override
    public void update(FlowJsonDataVO flowJsonDataVO) {
        String userAccount = JwtUtils.getUserAccount();
        flowJsonDataMapper.updateJsonDataByIdAndUserAccount(flowJsonDataVO.getJsonData(), flowJsonDataVO.getId(), userAccount);
    }

    @Override
    public void delete(Long id) {
        String userAccount = JwtUtils.getUserAccount();
        flowJsonDataMapper.deleteByIdAndUserAccount(id, userAccount);
    }

    @Override
    public void deleteByFilePathId(Long filePathId) {
        String userAccount = JwtUtils.getUserAccount();
        flowJsonDataMapper.deleteByFilePathIdAndUserAccount(filePathId, userAccount);
    }
}
